#include <utility>
#include <string>
#include <iostream>

using namespace std;

class StrVec {
    public:
        StrVec() {};
        StrVec(string s): data(new string(s)) {};
        StrVec(const StrVec&);                  // 拷贝构造函数
        StrVec(StrVec&&) noexcept;              // 移动构造函数
        StrVec& operator=(const StrVec&);       // 拷贝赋值运算符
        StrVec& operator=(StrVec&&) noexcept;   // 移动赋值运算符
    private:
        string *data;
};

StrVec getVec(istream &in) {
    string s;
    in >> s;
    return s;
}

int main()
{
    StrVec v1, v2;
    v1 = v2;                // v2 是左值；使用拷贝赋值
    v2 = getVec(cin);       // getVec 返回一个右值；使用移动赋值
}